// 浏览器WebSocket对象
var wsImpl = window.WebSocket || window.MozWebSocket;
export default function SocketStart(options) {
    this.url = options.url; // Socket地址
    this.ws = new wsImpl(options.url); // 初始化Socket对象
    // this.userid = options.userid; // 用户id
    this.onmessage = options.onmessage; // 接受消息回调函数
    this.onopen = options.onopen; // 连接成功回调函数
    this.onclose = options.onclose; // 连接断开回调函数
    this.onerror = options.onerror; // 连接报错回调函数
    // this.errorNum = 0 // 错误次数
    // this.dataType = options.dataType || 'json'; // json或txt格式数据 默认json
    var _self = this;
    SocketInit(_self)
}

function SocketInit(_self) {
    /**
     * 发送消息方法
     * msg 消息内容，字符串或json都可以
     * touser 接受方id
     */
    _self.send = function(msg) {
        // 发送消息
        console.log('websocket.js中发送消息', msg)
        try {
            _self.ws.send(JSON.stringify(msg))
        } catch (error) {
            console.log(error)
        }
    }

    /**
     * 接收消息事件
     */
    _self.ws.onmessage = function(evt) {
        // 判断消息是否为空
        console.log('接收消息事件====>', evt)
        const _msgBlod = evt.data
        if (!_msgBlod) {
            return;
        }
        // 返回 bold 数据，需要以下处理
        let res = {}
        let reader = new FileReader()
        reader.onload = e => {
            if (e.target.readyState === 2) {
                if (window.TextDecoder) {
                    const enc = new TextDecoder('utf-8')
                    res = JSON.parse(enc.decode(new Uint8Array(e.target.result))) // 转化成json对象
                } else {
                    res = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(e.target.result)))
                }
                // 0 表示成功，-1 错误或异常，-2 设备正忙或正在读取
                // if (res.ErrorCode === 0) {
                //     // 调用回调函数
                //     if (_self.onmessage) {
                //         _self.onmessage(res)
                //     }
                // }
                if (res) {
                    if (_self.onmessage) {
                        _self.onmessage(res)
                    }
                }
            }
        }
        reader.readAsArrayBuffer(_msgBlod)
    };
    // 连接成功事件
    _self.ws.onopen = function() {
        console.error("_self.ws.onopen=>连接开启！")
        //调用回调函数
        if (_self.onopen) {
            _self.onopen()
        }
    };


    // 断开连接事件
    _self.ws.onclose = function() {
        console.error("_self.ws.onclose=>连接断开！")
        // 调用回调函数
        if (_self.onclose) {
            _self.onclose()
        }
    }

    // 连接出错
    _self.ws.onerror = function() {
        // _self.errorNum++
        // // console.log('连接出错:', _self.errorNum)
        // if (_self.errorNum === 1) {
        //     // 判断第一次请求报错
        //     // 读卡服务未启动，自动启动服务，再重新发起连接
        //     location.href = 'kycr://hello'
        //     setTimeout(() => {
        //         _self.ws = new wsImpl(_self.url)
        //         SocketInit(_self)
        //     }, 2000)
        // }
        //调用回调函数
        if (_self.onerror) {
            _self.onerror()
        }
    };
}
